index.ts 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { NextApiRequest, NextApiResponse } from 'next'
  2. import { constructHeaders } from '@/lib/api/apiHelpers'
  3. import apiWrapper from '@/lib/api/apiWrapper'
  4. import { executeQuery } from '@/lib/api/self-hosted/query'
  5. import { PgMetaDatabaseError } from '@/lib/api/self-hosted/types'
  6. export default (req: NextApiRequest, res: NextApiResponse) =>
  7. apiWrapper(req, res, handler, { withAuth: true })
  8. async function handler(req: NextApiRequest, res: NextApiResponse) {
  9. const { method } = req
  10. switch (method) {
  11. case 'POST':
  12. return handlePost(req, res)
  13. default:
  14. res.setHeader('Allow', ['POST'])
  15. res.status(405).json({ error: { message: `Method ${method} Not Allowed` } })
  16. }
  17. }
  18. const handlePost = async (req: NextApiRequest, res: NextApiResponse) => {
  19. const { query } = req.body
  20. const headers = constructHeaders(req.headers)
  21. const { data, error } = await executeQuery({ query, headers })
  22. if (error) {
  23. if (error instanceof PgMetaDatabaseError) {
  24. const { statusCode, message, formattedError } = error
  25. return res.status(statusCode).json({ message, formattedError })
  26. }
  27. const { message } = error
  28. return res.status(500).json({ message, formattedError: message })
  29. } else {
  30. return res.status(200).json(data)
  31. }
  32. }